#ifndef _SEM_HPP_
#define _SEM_HPP_

#include <iostream>
#include <semaphore.h>

const int default_cap = 1;

// 信号量。
class Sem
{
    public:
        Sem(int value = default_cap)
        {
            // 初始化函数。
            //      信号量/ 是否进程间通信的选项/信号量初始值。
            sem_init(&_sem,0,value);
        }
        ~Sem()
        {
            sem_destroy(&_sem);
        }
        void P()
        {
            // 等待信号量，会将信号量减一。
            sem_wait(&_sem);  // 原子的
        }
        void V()
        {
            // 发布信号量，表示资源使用完毕，可以归还资源了，会将信号量加一。
            sem_post(&_sem);  // 原子的
        }
    private:
        sem_t _sem;
};

#endif